const express = require('express')
const userRouter = require('./router/user')
const userInfoRouter = require('./router/userInfo')
const app = express()
// 导入 cors 中间件
const cors = require('cors')
// 导入解析token的模块
const expressJWT = require('express-jwt')
const config = require('./config')
const { error } = require('@hapi/joi/lib/base')
// 表单解析
app.use(express.urlencoded({ extended: false }))
// 将 cors 注册为全局中间件
app.use(cors())

// 响应数据的中间件(发送错误或者抛出错误的时候用)
app.use((req, res, next) => {
    // status的默认值为1
    // err可能是一个对象,也可能只是一个字符串
    res.fnErr = (err, status = 1) => {
        res.send({
            status,
            message: err instanceof Error ? err.message : err
        })
    }
    next()
})

// 解析token的中间件
// 注意：只要配置成功了 express-jwt 这个中间件，就可以把解析出来的用户信息，挂载到 req.user 属性上
// 设置以api开头的接口不需要访问权限

app.use(
    expressJWT.expressjwt({ secret: config.jwtSelectKey, algorithms: ["HS256"] }).unless({
        path: [/^\/api\//],
    })
)

app.use('/api', userRouter)
app.use('/my', userInfoRouter)
// 错误中间件(放路由后面)
app.use(function (err, req, res, next) {
    if (err.name === 'UnauthorizedError') {
        return res.fnErr('身份验证失败')

    }
    res.send(err)
})
app.listen(80, () => {
    console.log('running at 127.0.0.1')

})